unit pila;

interface
  Type
    Telem = char;
    Tpila = ^Nodo;
    Nodo = record
      elem: Telem;
      sig: Tpila;
  end;
    procedure crearPila (var pila: Tpila);
    function pilaVacia (pila: Tpila): boolean;
    procedure apilar (var pila: Tpila; elem: Telem);
    procedure desapilar (var pila: Tpila);
    function cima (pila: Tpila): Telem;
    procedure destruirPila(pila: Tpila);

implementation

procedure crearPila (var pila: Tpila);
begin
  pila := nil;
end;

procedure destruirPila(pila: Tpila);
begin
  dispose (pila);
end;


function pilaVacia (pila: Tpila): boolean;
begin
  pilaVacia:= pila = nil;
end;

procedure apilar (var pila: Tpila; elem: Telem);
var
  aux: Tpila;
begin
  new (aux);
  aux^.elem := elem;
  aux^.sig := pila;
  pila := aux;
end;

procedure desapilar (var pila: Tpila);
var
  aux: Tpila;
begin
  if not pilaVacia(pila) then
  begin
    aux := pila;
    pila := pila^.sig;
    dispose (aux);
  end;
end;

function cima (pila: Tpila): Telem;
begin
  if not pilaVacia (pila) then
    result := pila^.elem;
end;

end.
